package com.summer_administration.service.Impl;

import com.summer_administration.exception.BusinessException;
import com.summer_administration.mapper.GroupeMapper;
import com.summer_administration.mapper.MemberMapper;
import com.summer_administration.pojo.Groupe;
import com.summer_administration.service.GroupeService;
import com.summer_administration.utils.ThreadLocalUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
import java.util.Optional;

@Service
public class GroupeServiceImpl implements GroupeService {
    @Autowired
    private GroupeMapper groupeMapper;
    @Autowired
    private MemberMapper memberMapper;

    @Override
    @Transactional
    public void add(Groupe groupe) {
        // 新增一个根剧小组名字查询小组id
        /*String groupeName = groupe.getGroupName();
        String groupId = groupeMapper.findGroupIdByGroupName(groupeName);
        groupe.setGroupId(groupId);*/

        // 验证小组ID唯一性
        if (groupeMapper.existsByGroupId(groupe.getGroupId())) {
            throw new BusinessException("小组ID已存在");
        }

        // 验证组长是否存在
        if (!memberMapper.existsByName(groupe.getLeader())) {
            throw new BusinessException("组长不存在");
        }

        // 设置创建信息
        Map<String, Object> userInfo = ThreadLocalUtil.get();
        groupe.setCreateUser((Integer) userInfo.get("id"));
        groupe.setCreateTime(LocalDateTime.now());
        groupe.setUpdateTime(LocalDateTime.now());

        // 处理成员默认值
        handleMembers(groupe);

        groupeMapper.add(groupe);
    }

    @Override
    public List<Groupe> list() {
        Map<String, Object> userInfo = ThreadLocalUtil.get();
        return groupeMapper.listByUser((Integer) userInfo.get("id"));
    }

    @Override
    @Transactional
    public void update(Groupe groupe) {
        // 新增一个根剧小组名字查询小组id
        /*String groupeName = groupe.getGroupName();
        String groupId = groupeMapper.findGroupIdByGroupName(groupeName);
        groupe.setGroupId(groupId);*/

        Groupe existing = groupeMapper.getById(groupe.getId());
        if (existing == null) {
            throw new BusinessException("小组不存在");
        }

        // 验证小组ID是否修改
       /* if (!existing.getGroupId().equals(groupe.getGroupId())) {
            throw new BusinessException("小组ID不可修改");
        }*/

        // 处理成员默认值
        handleMembers(groupe);

        // 保留原始创建信息
        groupe.setCreateUser(existing.getCreateUser());
        groupe.setCreateTime(existing.getCreateTime());
        groupe.setUpdateTime(LocalDateTime.now());

        groupeMapper.update(groupe);
    }

    @Override
    @Transactional
    public void delete(Integer id) {
        Groupe groupe = groupeMapper.getById(id);
        if (groupe == null) {
            throw new BusinessException("小组不存在");
        }

        // 检查关联活动
        if (groupeMapper.hasRelatedActivities(groupe.getGroupId())) {
            throw new BusinessException("存在关联活动，无法删除");
        }

        groupeMapper.delete(id);
    }

    private void handleMembers(Groupe groupe) {
        if (groupe.getMember1() == null) groupe.setMember1("无");
        if (groupe.getMember2() == null) groupe.setMember2("无");
        if (groupe.getMember3() == null) groupe.setMember3("无");
        if (groupe.getMember4() == null) groupe.setMember4("无");
    }

    @Override
    public String getGroupNameByGroupId(String groupId) {
        String groupName = groupeMapper.findGroupNameByGroupId(groupId);
        if (groupName == null) {
            throw new BusinessException("小组不存在");
        }
        return groupName;
    }
}